home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 11 / CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso / cucd / programming / oberonv4 / source / system / amigados.mod (.txt) < prev    next >
Oberon Text  |  1996-06-09  |  11KB  |  362 lines

  1. Syntax10.Scn.Fnt
  2. Syntax10b.Scn.Fnt
  3. Syntax12b.Scn.Fnt
  4. MODULE AmigaDos; (*shml/cn/FF/RD/OJ *)
  5. (* Danger: RETURN of open Array in FilePart() is still hacky! *)
  6. IMPORT
  7.     SYSTEM, E:=AmigaExec, U := AmigaUtility;
  8.     dosBase- : E.LibraryPtr;
  9.     dosVersion- : INTEGER;
  10.     termEntry : E.TermEntry;
  11.     dummy : LONGINT;
  12. CONST
  13.     dosName*="dos.library";
  14.     beginning*=-1;
  15.     end*=1;
  16.     newFile*=1006;
  17.     oldFile*=1005;
  18.     readWrite*=1004;
  19.     objectInUse*=202;
  20.     renameAcrossDevices*=215;
  21.     same*=0;
  22.     sharedLock*=-2;
  23.     ticksPerSecond*=50;
  24.     globalOnly*=8;
  25.     binaryVar*=10;
  26.     dontNullTerm*=11;
  27.     saveVar*=12;
  28.     protDelete*=0;
  29.     protExecute*=1;
  30.     protWrite*=2;
  31.     protRead*=3;
  32.     protArchive*=4;
  33.     protPure*=5;
  34.     protScript*=6;
  35.         Some Pointer without their records
  36.     CommandLineInterfacePtr=LONGINT;
  37.     ProcessId=LONGINT;
  38.     Date*=RECORD
  39.         days*:LONGINT;
  40.         minute*:LONGINT;
  41.         tick*:LONGINT
  42.     END;
  43.     FileHandlePtr*=LONGINT; (* NOTE: This is a BPTR *)
  44.     FileLockPtr*=LONGINT; (* NOTE: This is a BPTR *)
  45.     FileInfoBlock*=RECORD
  46.         diskKey*:LONGINT;
  47.         dirEntryType*:LONGINT;
  48.         fileName*:ARRAY 108 OF CHAR;
  49.         protection*:SET;
  50.         entryType*:LONGINT;
  51.         size*:LONGINT;
  52.         numBlock*:LONGINT;
  53.         date*:Date;
  54.         comment*:ARRAY 80 OF CHAR;
  55.         ownerUID*:INTEGER;
  56.         ownerGID*:INTEGER;
  57.         reserved*:ARRAY 32 OF CHAR
  58.     END;
  59.     FileInfoBlockPtr*=LONGINT;
  60.     Process*=RECORD
  61.         task*:E.Task;
  62.         msgPort*:E.MsgPort;
  63.         pad*:INTEGER;
  64.         segList*:LONGINT;
  65.         stackSize*:LONGINT;
  66.         globVec*:LONGINT;
  67.         taskNum*:LONGINT;
  68.         stackBase*:LONGINT;
  69.         result2*:LONGINT;
  70.         currentDir*:FileLockPtr;
  71.         cis*:FileHandlePtr;
  72.         cos*:FileHandlePtr;
  73.         consoleTask*:ProcessId;
  74.         fileSystemTask*:ProcessId;
  75.         cli*:CommandLineInterfacePtr;
  76.         returnAddr*:LONGINT;
  77.         pktWait*:LONGINT;
  78.         windowPtr*:LONGINT;
  79.         homeDir*:FileLockPtr;
  80.         flags*:SET;
  81.         exitCode*:LONGINT;
  82.         exitData*:LONGINT;
  83.         arguments*:LONGINT;
  84.         localVars*:E.MinList;
  85.         shellPrivate*:LONGINT;
  86.         ces*:FileHandlePtr
  87.     END;
  88. CONST
  89.     sysDummy*=U.user+32;
  90.     sysInput*=sysDummy+1;
  91.     sysOutput*=sysDummy+2;
  92.     sysASynch*=sysDummy+3;
  93.     sysUserShell*=sysDummy+4;
  94.     sysCustomShell*=sysDummy+5;
  95.     npDummy*=U.user+1000;
  96.     npCloseOutput*=npDummy+7;
  97. PROCEDURE -ReturnD0    04EH,05EH,  04EH,075H;
  98. PROCEDURE AddPart*(VAR dir : ARRAY OF CHAR; filename : ARRAY OF CHAR; size:LONGINT) : BOOLEAN;
  99. BEGIN
  100.     dummy := SYSTEM.ADR(filename);
  101.     SYSTEM.PUTREG( 1, SYSTEM.ADR(dir) );
  102.     SYSTEM.PUTREG( 2, dummy );
  103.     SYSTEM.PUTREG( 3, size );
  104.     SYSTEM.CALL( -882, dosBase );
  105.     SYSTEM.GETREG( 0, dummy );
  106.     RETURN dummy#E.false
  107. END AddPart;
  108. PROCEDURE AllocDosObject*(type, tags: LONGINT): LONGINT;
  109. BEGIN
  110.     SYSTEM.PUTREG( 1, type );
  111.     SYSTEM.PUTREG( 2, tags );
  112.     SYSTEM.CALL(-228, dosBase);
  113.     ReturnD0
  114. END AllocDosObject;
  115. PROCEDURE Close*(file:FileHandlePtr):BOOLEAN;
  116. BEGIN
  117.     SYSTEM.PUTREG( 1, file );
  118.     SYSTEM.CALL( -36, dosBase );
  119.     SYSTEM.GETREG( 0, dummy );
  120.     RETURN dummy#E.false
  121. END Close;
  122. PROCEDURE CurrentDir*(lock: FileLockPtr):FileLockPtr;
  123. BEGIN
  124.     SYSTEM.PUTREG( 1, lock );
  125.     SYSTEM.CALL( -126, dosBase );
  126.     ReturnD0
  127. END CurrentDir;
  128. PROCEDURE CreateDir*(name: ARRAY OF CHAR): FileLockPtr;
  129. BEGIN
  130.     SYSTEM.PUTREG( 1, SYSTEM.ADR(name) );
  131.     SYSTEM.CALL( -120, dosBase );
  132.     ReturnD0
  133. END CreateDir;
  134. PROCEDURE DateStamp*(VAR date:Date);
  135. BEGIN
  136.     SYSTEM.PUTREG( 1, SYSTEM.ADR(date) );
  137.     SYSTEM.CALL( -192, dosBase )
  138. END DateStamp;
  139. PROCEDURE Delay*(w: LONGINT);
  140. BEGIN
  141.     SYSTEM.PUTREG( 1, w );
  142.     SYSTEM.CALL( -198, dosBase )
  143. END Delay;
  144. PROCEDURE DeleteFile*(name:ARRAY OF CHAR):BOOLEAN;
  145. BEGIN
  146.     SYSTEM.PUTREG( 1, SYSTEM.ADR(name) );
  147.     SYSTEM.CALL( -72, dosBase );
  148.     SYSTEM.GETREG( 0, dummy );
  149.     RETURN dummy#0
  150. END DeleteFile;
  151. PROCEDURE DupLockFromFH*(fh:FileHandlePtr):FileLockPtr;
  152. BEGIN
  153.     SYSTEM.PUTREG( 1, fh );
  154.     SYSTEM.CALL( -372, dosBase );
  155.     ReturnD0
  156. END DupLockFromFH;
  157. PROCEDURE Examine*(lock:FileLockPtr; VAR info:FileInfoBlock):BOOLEAN;
  158. (* NOTE: info has to be longword aligned. *)
  159. BEGIN
  160.     SYSTEM.PUTREG( 1, lock );
  161.     SYSTEM.PUTREG( 2, SYSTEM.ADR(info) );
  162.     SYSTEM.CALL( -102, dosBase );
  163.     SYSTEM.GETREG( 0, dummy );
  164.     RETURN dummy#0
  165. END Examine;
  166. PROCEDURE ExNext*(lock: FileLockPtr; VAR info: FileInfoBlock): BOOLEAN;
  167. BEGIN
  168.     SYSTEM.PUTREG( 1, lock );
  169.     SYSTEM.PUTREG( 2, SYSTEM.ADR(info) );
  170.     SYSTEM.CALL( -108, dosBase );
  171.     SYSTEM.GETREG( 0, dummy );
  172.     RETURN dummy#0
  173. END ExNext;
  174. PROCEDURE FGets*(fh: FileHandlePtr; VAR buf: ARRAY OF CHAR; buflen: LONGINT): LONGINT;
  175. BEGIN
  176.     SYSTEM.PUTREG( 1, fh );
  177.     SYSTEM.PUTREG( 2, SYSTEM.ADR(buf) );
  178.     SYSTEM.PUTREG( 3, buflen );
  179.     SYSTEM.CALL( -336, dosBase );
  180.     ReturnD0
  181. END FGets;
  182. PROCEDURE FilePart*(VAR path, fileName: ARRAY OF CHAR);
  183. VAR p: POINTER TO ARRAY 1 OF CHAR;
  184. BEGIN
  185.     SYSTEM.PUTREG( 1, SYSTEM.ADR(path) );
  186.     SYSTEM.CALL( -870, dosBase );
  187.     SYSTEM.GETREG( 0, p );
  188.     COPY(p^, fileName)
  189. END FilePart;
  190. PROCEDURE FreeDosObject*(type: LONGINT; ptr: LONGINT);
  191. BEGIN
  192.     SYSTEM.PUTREG( 1, type );
  193.     SYSTEM.PUTREG( 2, ptr );
  194.     SYSTEM.CALL( -234, dosBase )
  195. END FreeDosObject;
  196. PROCEDURE GetCurrentDirName*(VAR buf: ARRAY OF CHAR; len: LONGINT): BOOLEAN;
  197. BEGIN
  198.     SYSTEM.PUTREG( 1, SYSTEM.ADR(buf) );
  199.     SYSTEM.PUTREG( 2, len );
  200.     SYSTEM.CALL( -564, dosBase );
  201.     SYSTEM.GETREG( 0, dummy);
  202.     RETURN dummy#0
  203. END GetCurrentDirName;
  204. PROCEDURE GetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):LONGINT;
  205. BEGIN
  206.     SYSTEM.PUTREG( 1, SYSTEM.ADR(name) );
  207.     SYSTEM.PUTREG( 2, buffer );
  208.     SYSTEM.PUTREG( 3, size );
  209.     SYSTEM.PUTREG( 4, flags );
  210.     SYSTEM.CALL( -906, dosBase );
  211.     ReturnD0
  212. END GetVar;
  213. PROCEDURE IoErr*():LONGINT;
  214. BEGIN
  215.     SYSTEM.CALL( -132, dosBase );
  216.     ReturnD0
  217. END IoErr;
  218. PROCEDURE Lock*(name:ARRAY OF CHAR; type:LONGINT):FileLockPtr;
  219. BEGIN
  220.     SYSTEM.PUTREG( 1, SYSTEM.ADR(name) );
  221.     SYSTEM.PUTREG( 2, type );
  222.     SYSTEM.CALL( -84, dosBase );
  223.     ReturnD0
  224. END Lock;
  225. PROCEDURE NameFromFH*(fh:FileHandlePtr; VAR name:ARRAY OF CHAR):BOOLEAN;
  226. BEGIN
  227.     dummy := LEN(name);
  228.     SYSTEM.PUTREG( 2, SYSTEM.ADR(name) );
  229.     SYSTEM.PUTREG( 3, dummy );
  230.     SYSTEM.PUTREG( 1, fh );
  231.     SYSTEM.CALL( -408, dosBase );
  232.     SYSTEM.GETREG( 0, dummy );
  233.     RETURN dummy#0
  234. END NameFromFH;
  235. PROCEDURE NameFromLock*(lock:FileLockPtr; VAR name:ARRAY OF CHAR):BOOLEAN;
  236. BEGIN
  237.     dummy := LEN(name);
  238.     SYSTEM.PUTREG( 2, SYSTEM.ADR(name) );
  239.     SYSTEM.PUTREG( 3, dummy );
  240.     SYSTEM.PUTREG( 1, lock );
  241.     SYSTEM.CALL( -402, dosBase );
  242.     SYSTEM.GETREG( 0, dummy );
  243.     RETURN dummy#0
  244. END NameFromLock;
  245. PROCEDURE Open*(name:ARRAY OF CHAR; accessMode:LONGINT):FileHandlePtr;
  246. BEGIN
  247.     SYSTEM.PUTREG( 1, SYSTEM.ADR(name) );
  248.     SYSTEM.PUTREG( 2, accessMode );
  249.     SYSTEM.CALL( -30, dosBase );
  250.     ReturnD0
  251. END Open;
  252. PROCEDURE Output*():FileHandlePtr;
  253. BEGIN
  254.     SYSTEM.CALL( -60, dosBase );
  255.     ReturnD0
  256. END Output;
  257. PROCEDURE Read*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT;
  258. BEGIN
  259.     SYSTEM.PUTREG( 2, SYSTEM.ADR(buffer) );
  260.     SYSTEM.PUTREG( 1, file );
  261.     SYSTEM.PUTREG( 3, length );
  262.     SYSTEM.CALL( -42, dosBase );
  263.     ReturnD0
  264. END Read;
  265. PROCEDURE Rename*(oldName,newName:ARRAY OF CHAR):BOOLEAN;
  266. BEGIN
  267.     dummy := SYSTEM.ADR(newName);
  268.     SYSTEM.PUTREG( 1, SYSTEM.ADR(oldName) );
  269.     SYSTEM.PUTREG( 2, dummy );
  270.     SYSTEM.CALL( -78, dosBase );
  271.     SYSTEM.GETREG( 0, dummy );
  272.     RETURN dummy#0
  273. END Rename;
  274. PROCEDURE SameLock*(lock1,lock2:FileLockPtr):LONGINT;
  275. BEGIN
  276.     SYSTEM.PUTREG( 1, lock1 );
  277.     SYSTEM.PUTREG( 2, lock2 );
  278.     SYSTEM.CALL( -420, dosBase );
  279.     ReturnD0
  280. END SameLock;
  281. PROCEDURE Seek*(file:FileHandlePtr; position,mode:LONGINT):LONGINT;
  282. BEGIN
  283.     SYSTEM.PUTREG( 1, file );
  284.     SYSTEM.PUTREG( 2, position );
  285.     SYSTEM.PUTREG( 3, mode );
  286.     SYSTEM.CALL( -66, dosBase );
  287.     SYSTEM.GETREG( 0, dummy );
  288.     IF (dosVersion<39) & (IoErr()#0) THEN  dummy:=-1  END;  (* OS2.x-Bug! *)
  289.     RETURN dummy
  290. END Seek;
  291. PROCEDURE SetCurrentDirName*(name: ARRAY OF CHAR): BOOLEAN;
  292. BEGIN
  293.     SYSTEM.PUTREG( 1, SYSTEM.ADR(name) );
  294.     SYSTEM.CALL( -558, dosBase );
  295.     SYSTEM.GETREG(0, dummy);
  296.     RETURN dummy#0
  297. END SetCurrentDirName;
  298. PROCEDURE SetFileSize*(fh:FileHandlePtr; offset,mode:LONGINT):LONGINT;
  299. BEGIN
  300.     SYSTEM.PUTREG( 1, fh );
  301.     SYSTEM.PUTREG( 2, offset );
  302.     SYSTEM.PUTREG( 3, mode );
  303.     SYSTEM.CALL( -456, dosBase );
  304.     ReturnD0
  305. END SetFileSize;
  306. PROCEDURE SetProtection*(name:ARRAY OF CHAR; mask:SET):BOOLEAN;
  307. BEGIN
  308.     SYSTEM.PUTREG( 1, SYSTEM.ADR(name) );
  309.     SYSTEM.PUTREG( 2, mask );
  310.     SYSTEM.CALL( -186, dosBase );
  311.     SYSTEM.GETREG( 0, dummy );
  312.     RETURN dummy#0
  313. END SetProtection;
  314. PROCEDURE SetVar*(name:ARRAY OF CHAR; buffer:LONGINT; size:LONGINT; flags:SET):BOOLEAN;
  315. BEGIN
  316.     SYSTEM.PUTREG( 1, SYSTEM.ADR(name) );
  317.     SYSTEM.PUTREG( 2, buffer );
  318.     SYSTEM.PUTREG( 3, size );
  319.     SYSTEM.PUTREG( 4, flags );
  320.     SYSTEM.CALL( -900, dosBase );
  321.     SYSTEM.GETREG( 0, dummy );
  322.     RETURN dummy#0
  323. END SetVar;
  324. PROCEDURE System*(command:ARRAY OF CHAR; VAR tagList:ARRAY OF U.TagItem):LONGINT;
  325. BEGIN
  326.     dummy := SYSTEM.ADR(tagList);
  327.     SYSTEM.PUTREG( 1, SYSTEM.ADR(command) );
  328.     SYSTEM.PUTREG( 2, dummy );
  329.     SYSTEM.CALL( -606, dosBase );
  330.     ReturnD0
  331. END System;
  332. PROCEDURE UnLock*(lock:FileLockPtr);
  333. BEGIN
  334.     SYSTEM.PUTREG( 1, lock );
  335.     SYSTEM.CALL( -90, dosBase )
  336. END UnLock;
  337. PROCEDURE Write*(file:FileHandlePtr; VAR buffer:ARRAY OF SYSTEM.BYTE; length:LONGINT):LONGINT;
  338. BEGIN
  339.     SYSTEM.PUTREG( 2, SYSTEM.ADR(buffer) );
  340.     SYSTEM.PUTREG( 1, file );
  341.     SYSTEM.PUTREG( 3, length );
  342.     SYSTEM.CALL( -48, dosBase );
  343.     ReturnD0
  344. END Write;
  345. PROCEDURE Init;
  346. TYPE LibraryPtr=POINTER TO E.Library;
  347. VAR lib:LibraryPtr;
  348. BEGIN
  349.     dosBase:=E.OpenLibrary(dosName,37);
  350.     IF dosBase=0 THEN HALT(99) END;
  351.     lib:=SYSTEM.VAL(LibraryPtr,dosBase);
  352.     dosVersion:=lib.version
  353. END Init;
  354. PROCEDURE Term;
  355. BEGIN
  356.     E.CloseLibrary( dosBase )
  357. END Term;
  358. BEGIN
  359.     Init;
  360.     E.Register(termEntry, Term)
  361. END AmigaDos.
  362.